#
"""
 赵振华 2024-04-06
 对应梁昆淼《数学物理方法》第五版，P.68 例题1
 傅里叶级数展开
"""
#
import numpy as np
import matplotlib.pyplot as plt
import scipy as sci


# 第一步定义矩形函数
def rect(x):  
    if ( x>-0.5 and x<0.5):
        out = 1
    else:
        out = 0
    return out

# 第二步定义矩形脉冲信号函数
def f(x,h,T):  #
    
    return h*rect(x/2/T)  

# 第三步定义傅里叶变换函数

def A(x,h,T):  #
    
    return 2*h*np.sin(x*T)/np.pi/x  

t = np.linspace(-3, 3, 100)
w = np.linspace(0, 30, 100)

y1 = np.array([rect(x) for x in t])
y2 = np.array([f(x,1,1) for x in t])
y3 = np.array([A(x,1,1) for x in w])

plt.figure(1)
plt.plot(t,y1, color="red",label='rect')
plt.legend()
plt.savefig('rect_function.png', dpi=300)
plt.show()

plt.figure(2)
plt.plot(t, y2, color="blue",label='f(t)')
plt.title("$h=1,T=1$")
plt.legend()
plt.savefig('pulse_function.png', dpi=300)
plt.show()

plt.figure(3)
plt.plot(w, y3, color="blue",label='A(w)')
plt.title("$h=1,T=1$")
plt.legend()
plt.savefig('fourier_transform.png', dpi=300)
plt.show()
